<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8" />
  <meta name="viewport"
    content="width=device-width, initial-scale=1.0,maximum-scale=1,minimum-scale=1,viewport-fit=cover" />
  <title>Document</title>
</head>

<body>
  <div>1231</div>
  <div>1231</div>
  <div>1231</div>
  <div>1231</div>
  <script>
    // let video = document.getElementsByTagName('video')[0]
    // video.playbackRate = 1.19
    // var remainingTime = video.duration - video.currentTime;
    // let beisuTime = Math.ceil(remainingTime / 1.19)
    // let hour = Math.floor(beisuTime / 3600)
    // let minute = Math.ceil((beisuTime - hour * 3600) / 60)
    // let second = beisuTime - hour * 3600 - minute * 60
    // console.log(`${hour}时-${minute}分-${second}秒`);
  </script>
  <script>

  </script>
  <script>
    {
      // const obj = { key: 'value' };
      // const var1 = obj;
      // const var2 = obj;

      // const set = new Set();
      // set.add(var1);
      // set.add(var2);

      // console.log(set);  // 输出: 1
      // console.log(set.size);  // 输出: 1
      // console.log(set.has(var1));  // 输出: true
      // console.log(set.has(var2));  // 输出: true

      // const c = { name: 'boxue' }
      // set.add(c)
      // console.log(set);  // 输出: 1


    }

    {
      /* constructor中使用Object.defineProperty的好处：
        1. 避免属性被覆盖
        2. 避免属性被删除
        3. 避免属性被重写
        4. 避免属性被修改
        5. 避免属性被重新定义
        6. 避免属性被删除
        7. 写入属性之前，可逻辑校验
      */
      class MyClass {
        constructor() {
          let _myProperty; // 私有变量，用于存储属性的值

          Object.defineProperty(this, 'myProperty', {
            get() {
              return _myProperty;
            },
            set(value) {
              if (value > 0) {
                _myProperty = value;
              } else {
                console.log('Invalid value for myProperty');
              }
            },
            // 注：writable 和 set 方法是互斥的，只能选择其中之一来定义属性的可写性
            // writable: false,// false(无法通过赋值操作来修改属性的值)
            enumerable: false,
            configurable: false // 表示属性不可再被修改或删除
          });
        }
      }

      const myInstance = new MyClass();
      console.log(myInstance.myProperty);  // 输出: undefined

      myInstance.myProperty = 10;  // 设置属性的值
      console.log(myInstance.myProperty);  // 输出: 10

      myInstance.myProperty = -5;  // 尝试设置无效的值
      // 输出: Invalid value for myProperty
      console.log(myInstance.myProperty);  // 输出: 10

    }


    {
      /* 
        零宽字符（Zero-width characters）是一类不可见的字符，它们在文本中没有显示效果，但可以用于特定的用途，例如调整文本的显示、隐藏敏感信息或进行文本处理。
        以下是一些常见的零宽字符：
        零宽空格（Zero-width space）：U+200B。它是一种不可见的空格字符，用于在文本中插入分隔符，而不改变显示效果。
        零宽度非连接符（Zero-width non-joiner）：U+200C。它用于在某些语言中，如阿拉伯语和波斯语，分离两个本来会连在一起的字符。
        零宽度连接符（Zero-width joiner）：U+200D。它用于在某些语言中，如印地语和泰米尔语，将两个本来不连接的字符连接在一起。
        零宽度间隔（Zero-width space joiner）：U+2060。它类似于零宽度连接符，用于在某些语言中连接字符，但不允许连字符断开。
        这些零宽字符可以在字符串中使用，但要小心使用，以免引入意外的问题或导致不良影响。在编程中，特别是在处理用户输入或进行文本处理时，应谨慎使用零宽字符，以确保正确的文本处理和显示效果。
      */
    }



  </script>

  <script></script>
</body>

</html>